package com.littleken.foodieService;

import com.littleken.foodiePojo.domain.ItemsDO;
import com.littleken.foodiePojo.domain.ItemsImgDO;
import com.littleken.foodiePojo.domain.ItemsParamDO;
import com.littleken.foodiePojo.domain.ItemsSpecDO;
import com.littleken.foodiePojo.vo.CommentLevelCountsVO;
import com.littleken.foodiePojo.vo.ItemCommentVO;
import com.littleken.foodiePojo.vo.SearchItemsVO;
import com.littleken.foodiePojo.vo.ShopcartVO;

import java.util.List;

public interface ItemService {

    /**
     * 根据商品ID查询详情
     *
     * @param itemId
     * @return
     */
    ItemsDO getItemById(String itemId);

    /**
     * 根据商品id查询商品图片列表
     *
     * @param itemId
     * @return
     */
    List<ItemsImgDO> getItemImgList(String itemId);

    /**
     * 根据商品id查询商品规格
     *
     * @param itemId
     * @return
     */
    List<ItemsSpecDO> getItemSpecList(String itemId);

    /**
     * 根据商品id查询商品参数
     *
     * @param itemId
     * @return
     */
    ItemsParamDO getItemParam(String itemId);

    /**
     * 根据商品id查询商品的评价等级数量
     *
     * @param itemId
     */
    CommentLevelCountsVO getCommentCounts(String itemId);

    /**
     * 根据商品id查询商品的评价（分页）
     *
     * @param itemId
     * @param level
     * @return
     */
    List<ItemCommentVO> getAllComments(String itemId, Integer level);

    /**
     * 关键词搜索商品列表
     *
     * @param keywords
     * @param sort
     * @return
     */
    List<SearchItemsVO> searhItemsByKeyword(String keywords, String sort);

    /**
     * 根据分类id搜索商品列表
     *
     * @param catId
     * @param sort
     * @return
     */
    List<SearchItemsVO> searhItemsByCatId(Integer catId, String sort);

    /**
     * 根据规格ids查询最新的购物车中商品数据（用于刷新渲染购物车中的商品数据）
     *
     * @param specIds
     * @return
     */
    List<ShopcartVO> queryItemsBySpecIds(String specIds);

    /**
     * 根据商品规格id获取规格对象的具体信息
     *
     * @param specId
     * @return
     */
    ItemsSpecDO queryItemSpecById(String specId);

    /**
     * 根据商品id获得商品图片主图url
     *
     * @param itemId
     * @return
     */
    String queryItemMainImgById(String itemId);

    /**
     * 减少库存
     *
     * @param specId
     * @param buyCounts
     */
    boolean decreaseItemSpecStock(String specId, int buyCounts);
}
